<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Excel数据导出功能使用指南</title>
    <style>
        body {
            font-family: 'Microsoft YaHei', Arial, sans-serif;
            max-width: 900px;
            margin: 0 auto;
            padding: 20px;
            line-height: 1.6;
            color: #333;
        }
        .header {
            background-color: #3498db;
            color: white;
            padding: 20px;
            text-align: center;
            border-radius: 5px;
            margin-bottom: 30px;
        }
        h1, h2, h3 {
            color: #2c3e50;
        }
        h2 {
            border-bottom: 1px solid #eee;
            padding-bottom: 10px;
            margin-top: 30px;
        }
        pre {
            background-color: #f8f8f8;
            padding: 15px;
            border-radius: 5px;
            overflow-x: auto;
            border: 1px solid #ddd;
        }
        code {
            font-family: Consolas, monospace;
            background-color: #f0f0f0;
            padding: 2px 4px;
            border-radius: 3px;
        }
        .note {
            background-color: #e7f4ff;
            border-left: 4px solid #3498db;
            padding: 15px;
            margin: 20px 0;
            border-radius: 0 5px 5px 0;
        }
        .warning {
            background-color: #fff8e7;
            border-left: 4px solid #f39c12;
            padding: 15px;
            margin: 20px 0;
            border-radius: 0 5px 5px 0;
        }
        table {
            border-collapse: collapse;
            width: 100%;
            margin: 20px 0;
        }
        th, td {
            border: 1px solid #ddd;
            padding: 8px 12px;
            text-align: left;
        }
        th {
            background-color: #f2f2f2;
        }
        .btn {
            display: inline-block;
            background-color: #3498db;
            color: white;
            text-decoration: none;
            padding: 10px 15px;
            border-radius: 4px;
            margin-top: 20px;
        }
        .btn:hover {
            background-color: #2980b9;
        }
        .step {
            margin-bottom: 25px;
            padding-left: 20px;
            position: relative;
        }
        .step-number {
            position: absolute;
            left: 0;
            top: 0;
            background-color: #3498db;
            color: white;
            width: 24px;
            height: 24px;
            border-radius: 50%;
            text-align: center;
            line-height: 24px;
            font-weight: bold;
        }
    </style>
</head>
<body>
    <div class="header">
        <h1>Excel 数据导出功能使用指南</h1>
        <p>本指南将帮助你使用并测试系统的Excel数据导出功能</p>
    </div>
    
    <h2>简介</h2>
    <p>系统提供了将数据导出为Excel文件的功能，支持标准导出和智能导出两种模式。所有导出功能都通过REST API接口提供，本测试页面是这些API的直观界面封装。</p>
    
    <div class="note">
        <strong>提示：</strong> 系统使用EasyExcel框架实现Excel导出，支持大数据量导出、自定义表头和样式。
    </div>
    
    <h2>支持的业务类型</h2>
    <p>当前系统支持以下业务类型的数据导出：</p>
    
    <table>
        <thead>
            <tr>
                <th>业务类型代码</th>
                <th>业务类型名称</th>
                <th>说明</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>INVOICE</td>
                <td>发票数据</td>
                <td>导出发票明细信息</td>
            </tr>
            <tr>
                <td>CUST_CREDIT</td>
                <td>客户授信</td>
                <td>导出客户授信信息</td>
            </tr>
            <tr>
                <td>CUST_PAYMENT_PLAN</td>
                <td>客户付款计划</td>
                <td>导出客户付款计划信息</td>
            </tr>
            <tr>
                <td>CUST_PAYMENT_RESULT</td>
                <td>客户付款结果</td>
                <td>导出客户付款结果信息</td>
            </tr>
        </tbody>
    </table>
    
    <h2>标准导出功能</h2>
    
    <div class="step">
        <div class="step-number">1</div>
        <h3>标准导出适用场景</h3>
        <p>标准导出适用于数据量较小（一般不超过10万条记录）的场景，系统会将所有数据一次性导出为单个Excel文件。</p>
    </div>
    
    <div class="step">
        <div class="step-number">2</div>
        <h3>自定义表头</h3>
        <p>系统默认使用实体类中定义的Excel表头（通过@ExcelProperty注解指定），但你可以通过提供自定义表头映射来覆盖默认表头。</p>
        
        <p>自定义表头是一个JSON对象，键为实体类字段名，值为要显示的表头名称：</p>
        
<pre>{
    "invoiceId": "单据编号",
    "invoiceNo": "发票号码",
    "customerName": "客户姓名"
}</pre>
    </div>
    
    <div class="step">
        <div class="step-number">3</div>
        <h3>导出参数</h3>
        <p>你可以提供导出参数来过滤要导出的数据。参数同样是一个JSON对象，包含各种过滤条件：</p>
        
<pre>{
    "customerName": "测试客户",
    "startDate": "2023-01-01",
    "endDate": "2023-12-31",
    "minAmount": 100.00
}</pre>
        
        <p>每种业务类型支持的参数不同，以下是常见参数：</p>
        
        <table>
            <thead>
                <tr>
                    <th>参数名</th>
                    <th>类型</th>
                    <th>说明</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>customerName</td>
                    <td>String</td>
                    <td>客户名称（模糊匹配）</td>
                </tr>
                <tr>
                    <td>startDate</td>
                    <td>String</td>
                    <td>开始日期（yyyy-MM-dd格式）</td>
                </tr>
                <tr>
                    <td>endDate</td>
                    <td>String</td>
                    <td>结束日期（yyyy-MM-dd格式）</td>
                </tr>
                <tr>
                    <td>minAmount</td>
                    <td>Number</td>
                    <td>最小金额</td>
                </tr>
                <tr>
                    <td>maxAmount</td>
                    <td>Number</td>
                    <td>最大金额</td>
                </tr>
                <tr>
                    <td>status</td>
                    <td>String</td>
                    <td>状态（精确匹配）</td>
                </tr>
            </tbody>
        </table>
    </div>
    
    <div class="step">
        <div class="step-number">4</div>
        <h3>操作步骤</h3>
        <ol>
            <li>选择要导出的业务类型</li>
            <li>（可选）设置自定义表头</li>
            <li>（可选）设置导出参数</li>
            <li>点击"导出Excel文件"按钮</li>
            <li>等待系统生成Excel文件并自动下载</li>
        </ol>
    </div>
    
    <div class="warning">
        <strong>注意：</strong> 标准导出模式下，如果数据量过大，可能会导致浏览器或服务器内存压力增大，甚至导致超时错误。对于大数据量导出，请使用智能导出功能。
    </div>
    
    <h2>智能导出功能</h2>
    
    <div class="step">
        <div class="step-number">1</div>
        <h3>智能导出适用场景</h3>
        <p>智能导出会根据数据量自动选择合适的导出策略：</p>
        <ul>
            <li>对于小数据量（如低于10万条记录），使用单文件直接导出</li>
            <li>对于大数据量，使用分块导出，将数据拆分为多个Excel文件</li>
        </ul>
    </div>
    
    <div class="step">
        <div class="step-number">2</div>
        <h3>文件名设置</h3>
        <p>智能导出允许你设置导出文件的基本名称（不含扩展名）。如果是分块导出，系统会自动在文件名后添加索引号，例如"导出数据_1.xlsx"、"导出数据_2.xlsx"等。</p>
    </div>
    
    <div class="step">
        <div class="step-number">3</div>
        <h3>自定义表头和导出参数</h3>
        <p>智能导出的自定义表头和导出参数与标准导出相同。</p>
    </div>
    
    <div class="step">
        <div class="step-number">4</div>
        <h3>处理大数据量导出</h3>
        <p>当系统检测到数据量过大时，会自动启用分块导出模式：</p>
        <ol>
            <li>系统会返回第一个分块的数据和相关信息</li>
            <li>前端页面显示下载链接和进度信息</li>
            <li>用户下载完成后，需要刷新页面继续导出下一个分块</li>
            <li>系统会自动清理临时文件</li>
        </ol>
    </div>
    
    <div class="note">
        <strong>提示：</strong> 智能导出功能主要针对大数据量场景优化，即使数据量很小，也可以安全使用此功能。
    </div>
    
    <h2>导出结果字段说明</h2>
    
    <h3>发票数据(INVOICE)导出字段</h3>
    <table>
        <thead>
            <tr>
                <th>字段名</th>
                <th>说明</th>
                <th>数据类型</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>发票ID</td>
                <td>发票系统ID</td>
                <td>字符串</td>
            </tr>
            <tr>
                <td>发票号码</td>
                <td>发票编号</td>
                <td>字符串</td>
            </tr>
            <tr>
                <td>客户名称</td>
                <td>购买方名称</td>
                <td>字符串</td>
            </tr>
            <tr>
                <td>开票日期</td>
                <td>发票开具日期</td>
                <td>日期（yyyy-MM-dd）</td>
            </tr>
            <tr>
                <td>不含税金额</td>
                <td>发票的不含税金额</td>
                <td>数字（小数点后2位）</td>
            </tr>
            <tr>
                <td>税率</td>
                <td>发票的税率</td>
                <td>数字（小数点后2位）</td>
            </tr>
            <tr>
                <td>税额</td>
                <td>发票的税额</td>
                <td>数字（小数点后2位）</td>
            </tr>
            <tr>
                <td>价税合计</td>
                <td>含税总金额</td>
                <td>数字（小数点后2位）</td>
            </tr>
            <tr>
                <td>备注</td>
                <td>发票备注信息</td>
                <td>字符串</td>
            </tr>
        </tbody>
    </table>
    
    <h2>REST API接口说明</h2>
    
    <h3>1. 标准导出</h3>
    <pre>POST /common/exportExcel
Content-Type: application/json

{
    "businessType": "INVOICE",
    "headers": {
        "invoiceId": "单据编号",
        "invoiceNo": "发票号码"
    },
    "exportParams": {
        "customerName": "测试客户",
        "startDate": "2023-01-01"
    }
}
</pre>
    
    <h3>2. 智能导出</h3>
    <pre>POST /common/smartExportExcel
Content-Type: application/json

{
    "businessType": "INVOICE",
    "fileName": "发票数据",
    "headers": {
        "invoiceId": "单据编号",
        "invoiceNo": "发票号码"
    },
    "exportParams": {
        "customerName": "测试客户",
        "startDate": "2023-01-01"
    }
}
</pre>
    
    <h3>3. 清理临时文件</h3>
    <pre>POST /common/cleanupTempFile?chunkId=xxxx
</pre>
    
    <h2>故障排除</h2>
    
    <h3>常见错误及解决方案</h3>
    
    <table>
        <thead>
            <tr>
                <th>错误提示</th>
                <th>可能原因</th>
                <th>解决方案</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>导出失败: 业务类型不能为空</td>
                <td>未选择业务类型或业务类型参数为空</td>
                <td>确保已选择正确的业务类型</td>
            </tr>
            <tr>
                <td>导出失败: JSON格式错误</td>
                <td>自定义表头或导出参数的JSON格式不正确</td>
                <td>检查JSON语法是否正确</td>
            </tr>
            <tr>
                <td>导出失败: 请求超时</td>
                <td>数据量过大导致处理时间超过服务器超时限制</td>
                <td>使用智能导出功能替代标准导出</td>
            </tr>
            <tr>
                <td>导出失败: 内存不足</td>
                <td>数据量过大导致服务器内存不足</td>
                <td>使用智能导出功能并添加更多过滤条件减少数据量</td>
            </tr>
        </tbody>
    </table>
    
    <div style="text-align: center; margin-top: 30px;">
        <a href="excel-export.html" class="btn">返回测试页面</a>
        <a href="index.html" class="btn" style="margin-left: 10px;">返回主页</a>
    </div>
</body>
</html> 